perm filename MIXS.FAI[TMP,LCS] blob sn#170772 filedate 1975-07-31 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00008 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		TITLE MIXER
C00004 00003	GRAT:	CLRBFI
C00006 00004	DLAY:	PUSHJ P,IN1
C00008 00005	IN1:	IN 11,
C00010 00006	DONE:	PUSHJ P,OBUF
C00012 00007	GETNAM:	MOVEI A,
C00013 00008	INNUM:	SETZ
C00015 ENDMK
C⊗;
	TITLE MIXER
	ENTRY MIXER
	EXTERN GETNUM,GTNUM2,PNUM
	A←1 ↔ B←2 ↔ C←3 ↔ D←4 ↔ E←5
	F←6 ↔ DUR←7 ↔ MAX←10 ↔ S←11
	R1←12 ↔ R2←13 ↔ P←17 ↔ NBUFS←←4
	DEFINE FIXX(N)
   <	JUMPGE	N,.+5
	MOVNS	N
	FIX	N,233000
	MOVNS	N
	CAIA
	FIX 	N,233000    >
	DEFINE FLOAT(N)
   <	TLC N,232000
	FADR N,N   >

MIXER:	0
	MOVE P,[IOWD 20,PDL]
	CLRBFI
	OUTSTR [ASCIZ/
	TYPE NAME 1: /]
	SETZ F,
	PUSHJ P,GNAME
	OPEN 11,[14↔'DSK   '↔BUF1]
	JRST 4,.
	INBUF 11,NBUFS
	LOOKUP 11,FILNAM
	JRST MIXER
	AOJ F,

SECOND:	CLRBFI
	OUTSTR [ASCIZ/	TYPE NAME 2: /]
	PUSHJ P,GNAME
	OPEN 2,[14↔'DSK   '↔BUF2]
	JRST 4,.
	INBUF 2,NBUFS
	LOOKUP 2,FILNAM
	JRST SECOND
	AOJ F,

	CLRBFI
	OUTSTR [ASCIZ/	DELAY TIME = /]
	JSA 16,GETNUM
	SNUM2#

	CLRBFI
	OUTSTR [ASCIZ/	SRATE = /]
	INCHWL A
	PUSHJ P,INNUM
	SKIPN
	HRRZI =10000
	FLOAT(0)
	MOVEM FSRATE#
	FMPR SNUM2
	FIXX(0)
	MOVEM SNUM2
GRAT:	CLRBFI
	SETZ S,
	OUTSTR [ASCIZ/	RATIO ( FIRST:SECOND ) = /]
	JSA 16,GTNUM2
	RA1#
	RA2#
	SKIPG R1,RA1
	MOVE R1,[1.]
	FMPR R1,[=4096.]
	FIXX(R1)
	SKIPG R2,RA2
	MOVE R2,[1.]
	FMPR R2,[=4096.]
	FIXX(R2)

ONAME:	CLRBFI
	OUTSTR [ASCIZ/	OUTPUT NAME : /]
	PUSHJ P,GNAME
	OPEN [14↔'DSK   '↔BUF3,,0]
	JRST 4,.
	OUTBUF NBUFS
	ENTER FILNAM
	JRST ONAME
	PUSHJ P,OBUF+1
	SETZM EOF1#
	SETZM EOF2#
	SETZ DUR,
	SETZ MAX,
	PUSHJ P,IN2
	AOS BUF2+2
	SETOM DFLG#
DLAY:	PUSHJ P,IN1
	ADD DUR,F
	CAML DUR,SNUM2
	JRST FIND
	PUSHJ P,MOV
	JRST DLAY

MOV:	ILDB D,A
	TDON D,[NEG: 777777774000]
	LDB D,A
	IMUL D,R1
	ASH D,-15
	CAMLE D,MAX
	MOVE MAX,D
	IDPB D,C
	SOSG BUF3+2
	PUSHJ P,OBUF
	SOJG F,MOV
	POPJ P,

EQBUF:	PUSHJ P,IN1
	JRST SETFLG

FIND:	SOS BUF2+2
	SUB DUR,SNUM2
	SKIPG F,DUR
	JRST EQBUF
	EXCH F,BUF1+2
	SUB F,BUF1+2
	PUSHJ P,MOV

SETFLG:	SETZM DFLG
	MOVE DUR,SNUM2
	
MIX:	ILDB D,A
	TDON D,NEG
	LDB D,A
	ILDB E,B
	TDON E,NEG
	LDB E,B
	IMUL D,R1
	IMUL E,R2
	ADD D,E
	ASH D,-15
	CAMLE D,MAX
	MOVE MAX,D
	IDPB D,C
	AOJ DUR,
	SOSG BUF3+2
	PUSHJ P,OBUF
	SOSG BUF1+2
	PUSHJ P,IN1
	SOSG BUF2+2
	PUSHJ P,IN2
	JRST MIX
IN1:	IN 11,
	CAIA
	JRST CKEOF
	HRRZI F,3
	IMULB F,BUF1+2
	HRRZ A,BUF1+1
	HRLI A,1400
	POPJ P,

CKEOF:	STATO 11,20000
	JRST 4,.
	SETOM EOF1
	SKIPGE EOF2
	JRST DONE
	SKIPGE DFLG
	JRST BREAK
PART2:	MOVE R1,R2
	SOSG F,BUF2+2
	PUSHJ P,IN2
	ADD DUR,F
	MOVE A,B
	PUSHJ P,MOV
	JRST .-4

BREAK:	SETZ D,
	IDPB D,C
	AOJ DUR,
	SOSG BUF3+2
	PUSHJ P,OBUF
	CAMGE DUR,SNUM2
	JRST BREAK+1
	JRST PART2
	
IN2:	IN 2,
	CAIA
	JRST CKEOF2
	HRRZI F,3
	IMULB F,BUF2+2
	HRRZ B,BUF2+1
	HRLI B,1400
	POPJ P,

CKEOF2:	STATO 2,20000
	JRST 4,.
	SETOM EOF2
	SKIPGE EOF1
	JRST DONE
	HRRZ F,BUF1+2
	ADD DUR,F
	PUSHJ P,MOV
	PUSHJ P,IN1
	JRST .-3

OBUF:	HRRM C,BUF3+1
	OUT
	CAIA
	JRST 4,.
BPO3:	HRRZI C,3
	IMULB C,BUF3+2
	HRRZ C,BUF3+1
	HRLI C,1400
	POPJ P,
DONE:	PUSHJ P,OBUF
	RELEAS
	OUTSTR [ASCIZ/
	MAX AMPL = /]
	MOVE MAX
	PUSHJ P,OUTINT
	OUTSTR [ASCIZ/
	NUMBER OF SAMPLES = /]
	MOVE DUR
	PUSHJ P,OUTINT
	OUTSTR [064220,,0]
	MOVE DUR
	FLOAT(0)
	FDVRM FSRATE
	JSA 16,PNUM
	FSRATE
	EXIT

NAME:	'MUSIC '
	'MUSAA '
	'MUSIC '
EXT:	'MUS   '
	'DMD   '
	'MUS   '
GNAME:	SETZM FILEXT+1
	SETZM FILPPN
	MOVE A,EXT(F)
	MOVEM A,FILEXT
	PUSHJ P,GETNAM
	SKIPN A
 	MOVE A,NAME(F)
    	MOVEM A,FILNAM
	CAIE C,"."
	JRST NOEXTN
	PUSHJ P,GETNAM
	MOVEM A,FILEXT
NOEXTN:	CAIE C,"["
	JRST FFDX
	PUSHJ P,GETP
	HRLZM A,FILPPN
	PUSHJ P,GETP
	HRRM A,FILPPN
FFDX:	INCHRW C
	CAIE C,12
	JRST FFDX
	POPJ P,
GETNAM:	MOVEI A,
	MOVE B,[440600,,A]
GETNML:	PUSHJ P,RCH
	POPJ P,
	SUBI C,40
	TLNE B,770000
	IDPB C,B
	JRST GETNML

GETP:	MOVEI A,
GETPL:	PUSHJ P,RCH
	POPJ P,
	TRNE A,770000
	JRST GETPL
	LSH A,6
	ADDI A,-40(C)
	JRST GETPL

RCH:	INCHWL C
	CAIN C,42
	JRST RCHQ
	CAIE C,11
	CAIN C," "
	JRST RCH
	CAIE C,"."
	CAIN C,","
	POPJ P,
	CAIE C,"["
	CAIN C,"]"
	POPJ P,
RCHQR:	CAIGE C,40
	POPJ P,
	CAIL C,"a"
	CAILE C,"z"
	CAIA
	SUBI C,40
POPJ1:	AOS (P)
	POPJ P,

RCHQ:	INCHWL C
	JRST RCHQR
INNUM:	SETZ
	CAIL A,60
	CAILE A,71
	POPJ P,
	IMULI =10
	ADDI -60(A)
GTCHR:	INCHRS A
	POPJ P,
	JRST INNUM+1

OUTINT:	HRRZI B,7
	JUMPE OUTZ
	IDIVI =10
	ADDI A,60
	HRRZM A,BLK(B)
	SOJGE B,OUTINT+1
OCHR:	OUTCHR BLK+1(B)
	CAIGE B,6
	AOJA B,OCHR
	POPJ P,
OUTZ:	CAIL B,7
	HRLZI B,300000
	JRST OCHR

FILNAM:	0
FILEXT:	0
	0
FILPPN:	0
BUF1:	BLOCK 3
BUF2:	BLOCK 3
BUF3:	BLOCK 3
PDL:	BLOCK 44
BLK:	BLOCK 10
	END